package 面向对象中级;

/**
 * static:静态，是一个修饰符。
 *   能修饰三种东西：
 *      -属性：静态属性或类属性。特点：类的所有对象共用同一个属性！！
 *      -方法：
 *      -构造代码块
 *
 *      注意：静态的东西不需要创建对象，就能调用！！！
 *
 *      用和不用区别？？？
 */
public class Bird {

    public String name;//没有static属性
    public static String color;//用static属性

    public static void main(String[] args) {
        Bird  b1=new Bird();
        Bird  b2=new Bird();
        b1.name="小红";
        b1.color="red";
        b2.name="小绿";
        b2.color="green";
        //-属性：静态属性或类属性。特点：类的所有对象共用同一个属性！！
        System.out.println(b1.name+"====>"+b1.color);//小红
        System.out.println(b2.name+"====>"+b2.color);//小绿
    }

}


class Bird2 {

    public String name;//没有static属性
    public static String color;//用static属性

    public void m1(){
        System.out.println(name+"====>"+color);//普通的方法能够访问：普通属性+类属性
    }
    //区别：1.不用创建对象，通过类名直接调用    2.只能访问类属性，不能访问普通属性！
    public static void m2(){
        //System.out.println(name+"====>"+color);//类方法能够访问：类属性
        System.out.println("====>"+color);//类方法能够访问：类属性
    }

    public static void main(String[] args) {
        Bird2.color="Blue";
        Bird2.m2();
    }

}

class Bird3 {

    public String name;//没有static属性
    public static String color;//用static属性

    {//普通构造代码块,创建对象时候调用
        System.out.println("普通。。。。。");
    }

    static{//类构造代码块，类加载jvm时候，执行一次
        System.out.println("类。。。。。");
    }

    public static void main(String[] args) {
        System.out.println(Bird3.color);//null
        System.out.println(Bird3.color);//null
        System.out.println(Bird3.color);//null

        // Bird3 b1=new Bird3();
        // Bird3 b2=new Bird3();
    }

}
